package proto

import (
	"bytes"
	"encoding/gob"
)

// 增册改查的相关协议

const (
	// 只有 leader 会发 ping
	CM_PING = iota
	SM_PONG

	// 请求投票
	CM_RequestVote
	SM_RequestVote

	// 写数据
	CM_Append
	SM_Append

	// 提交
	CM_Commit
	SM_Commit

	// follower 跟 leader 学习
	CM_Learn
	SM_Learn

	MaxMsgId // 保留
)

func Encode(a any) ([]byte, error) {
	var buff bytes.Buffer
	encoder := gob.NewEncoder(&buff)
	err := encoder.Encode(a)
	if err != nil {
		return nil, err
	}
	return buff.Bytes(), nil
}

func Decode(buf []byte, a any) error {
	buff := bytes.NewBuffer(buf)
	decoder := gob.NewDecoder(buff)
	err := decoder.Decode(a)
	if err != nil {
		return err
	}
	return nil
}
